package thread;

import java.util.Arrays;

class SimpleArrayList {
    /**通过数组来存储元素*/
    private Object[] array; //{null,,...}
    /**size用于记录有效元素个数*/
    private int size;
    public SimpleArrayList(int capacity){
        this.array = new Object[capacity];
    }
    /**向array数组中size位置添加元素*/
    public synchronized void add(Object obj){ //同步方法（对象所默认为this，也称之为同步监视器）
        //synchronized (this) {同步代码块
            //1.判断数组是否已满，满了以后要扩容
            if (size == array.length) {
                //数组扩容，创建一个原有数组2倍大小的数组，并把原先数组内容拷贝到新数组
                array = Arrays.copyOf(array, array.length * 2);
            }
            //2.添加新元素
            array[size] = obj;
            //3.有效元素个数+1
            size++;
        //}
    }
    /**
     * 移除对象
     *
     * @return
     */
    public synchronized boolean remove(Object obj){
        for (int i = 0; i < size; i++) {
            if (array[i].equals(obj)) {
                //方案1：移动元素（将i+1位置后面的所有元素向前移动）
                for (int j = i; j < size - 1; j++) {
                    array[j] = array[j + 1];
                }
                //方案2：移动元素
                //System.arraycopy(array,i+1, array,i, size-i-1);
                size--;
                array[size] = null;
                return true;
            }
        }
        return false;
    }
    public int size(){
        return size;
    }
}
public class SimpleArrayListDemo01 {
    public static void main(String[] args) throws InterruptedException {
        //1.构建集合对象
        SimpleArrayList list = new SimpleArrayList(16);
        //ArrayList list = new ArrayList(16); //线程不安全
        //2.构建两个线程对象，分别向集合中添加100个元素
        Thread t1 = new Thread(){
            public void run(){
                for (int i = 0; i < 100; i++) {
                    list.add(i);
                }
            }
        };
        Thread t2 = new Thread(){
            public void run(){
                for (int i = 100; i < 200; i++) {
                    list.add(i);
                }
            }
        };
        t1.start();
        t2.start();
        //3.获取集合中的有效元素的个数
        Thread.sleep(1000);
        System.out.println(list.size());
    }
}
